use thiserror::Error;

/// 解析错误类型
#[derive(Error, Debug)]
pub enum ParseError {
    #[error("文件不存在: {0}")]
    FileNotFound(String),
    
    #[error("无法打开文件: {0}")]
    IoError(#[from] std::io::Error),
    
    #[error("解析失败: {0}")]
    ParseFailed(String),
    
    #[error("模块未找到: {0}")]
    ModuleNotFound(String),
    
    #[error("正则表达式错误: {0}")]
    RegexError(#[from] regex::Error),
    
    #[error("Protobuf 编码错误: {0}")]
    ProtobufEncodeError(#[from] prost::EncodeError),
    
    #[error("Protobuf 解码错误: {0}")]
    ProtobufDecodeError(#[from] prost::DecodeError),
    
    #[error("环境变量解析失败: {0}")]
    EnvVarError(String),
    
    #[error("文件列表循环引用: {0}")]
    CircularReference(String),
    
    #[error("无效的模块名: {0}")]
    InvalidModuleName(String),
}

/// 统一的 Result 类型
pub type Result<T> = std::result::Result<T, ParseError>;
